﻿namespace CSharpPro._1027;

using System;

/// <summary>
/// 父亲类，用于表示父亲的基本信息和行为
/// </summary>
public class Father
{
    // 私有字段
    private string _name;
    private int _age;
    private string _occupation;

    // 公共属性（封装字段）
    public string Name
    {
        get => _name;
        set => _name = value ?? throw new ArgumentNullException(nameof(value), "姓名不能为空");
    }

    public int Age
    {
        get => _age;
        set
        {
            if (value < 0 || value > 150)
                throw new ArgumentOutOfRangeException(nameof(value), "年龄必须在0-150之间");
            _age = value;
        }
    }

    public string Occupation
    {
        get => _occupation;
        set => _occupation = value;
    }

    // 构造函数
    public Father()
    {
        // 无参构造函数
    }

    public Father(string name, int age, string occupation)
    {
        Name = name;
        Age = age;
        Occupation = occupation;
    }

    // 方法：打招呼
    public virtual void Greet()
    {
        Console.WriteLine($"大家好，我是{Name}，今年{Age}岁，从事{Occupation}工作。");
    }

    // 方法：照顾孩子
    public void TakeCareOfChild(string childName)
    {
        Console.WriteLine($"{Name}正在照顾孩子{childName}");
    }

    // 方法：工作
    public virtual void Work()
    {
        Console.WriteLine($"{Name}正在从事{Occupation}相关的工作");
    }

    // 重写ToString方法
    public override string ToString()
    {
        return $"Father [姓名: {Name}, 年龄: {Age}, 职业: {Occupation}]";
    }
}